container: Add snapshot() implementation
authorBenjamin Otte <otte@redhat.com>
Sun, 13 Nov 2016 15:50:24 +0000 (16:50 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 15 Nov 2016 16:48:45 +0000 (17:48 +0100)
Note that this implementation does not respect GDK windows at all. If
your widget requires respecting them, you should write your own
snapshot implementation and not chain up.

gtk/gtkcontainer.c

index e82f86c75bbde75d7766e725ba5b4e35245ddecd..673135f1355bebad987b19714f9002da5342f606 100644 (file)
@@ -325,6 +325,8 @@ static void     gtk_container_children_callback    (GtkWidget         *widget,
 static void     gtk_container_show_all             (GtkWidget         *widget);
 static gint     gtk_container_draw                 (GtkWidget         *widget,
                                                     cairo_t           *cr);
+static void     gtk_container_snapshot             (GtkWidget         *widget,
+                                                    GtkSnapshot       *snapshot);
 static void     gtk_container_map                  (GtkWidget         *widget);
 static void     gtk_container_unmap                (GtkWidget         *widget);
 static GtkSizeRequestMode gtk_container_get_request_mode (GtkWidget   *widget);
@@ -462,6 +464,7 @@ gtk_container_class_init (GtkContainerClass *class)
   widget_class->destroy = gtk_container_destroy;
   widget_class->compute_expand = gtk_container_compute_expand;
   widget_class->show_all = gtk_container_show_all;
+  widget_class->snapshot = gtk_container_snapshot;
   widget_class->draw = gtk_container_draw;
   widget_class->map = gtk_container_map;
   widget_class->unmap = gtk_container_unmap;
@@ -3078,6 +3081,26 @@ gtk_container_draw (GtkWidget *widget,
   return FALSE;
 }
 
+static void
+gtk_container_snapshot_forall (GtkWidget *child,
+                               gpointer   snapshot)
+{
+  gtk_container_snapshot_child (GTK_CONTAINER (_gtk_widget_get_parent (child)),
+                                child,
+                                snapshot);
+}
+
+static void
+gtk_container_snapshot (GtkWidget   *widget,
+                        GtkSnapshot *snapshot)
+{
+  GtkContainer *container = GTK_CONTAINER (widget);
+  
+  gtk_container_forall (container,
+                        gtk_container_snapshot_forall,
+                        snapshot);
+}
+
 static void
 gtk_container_map_child (GtkWidget *child,
                          gpointer   client_data)